/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.acworks.acroute.v2;

import java.util.Set;
import java.util.SortedSet;

/**
 *
 * @author nikita
 */
public interface Graph {

    Node getStartingNode();

    Node getEndingNode();

    /**     
     * @return all nodes present in this graph
     */
    SortedSet<Node> getNodes();

    /**
     *
     * @return all arcs
     */
    Set<Arc> getArcs();

    /**
     *
     * @param node required
     * @param type optional (defaults to all types)
     * @return all arcs indicent to node, optionally filtered by type
     */
    Set<Arc> getIncidentArcs(Node node, ArcDirectionType type);

    /**
     *
     * @param node
     * @param originating
     * @return collection of directed arcs originating from (terminating at)
     * given node
     */
    Set<Arc> getIncidentDirectedArcs(Node node, boolean originating);
}
